package com.yuand.controller;

import com.yuand.config.Global;
import com.yuand.config.Result;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author yuandong
 * @date 2021/9/9 14:56
 * 文件上传Controller
 */
@RestController
@RequestMapping("/sys")
public class UploadController {


    /**
     * 文件上传
     * @param file
     * @param request
     * @return
     */
    @PostMapping("/upload")
    public Result upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {

        // 上传文件路径
        String path = Global.getUploadPath();  // E:/xzjt/uploadPath
        File filePath = new File(path);
        System.out.println("文件的保存路径：" + path);
        if (!filePath.exists()) {
            System.out.println("目录不存在，创建目录:" + filePath);
            filePath.mkdirs();
        }

        //获取原始文件名称(包含格式)
        String originalFileName = file.getOriginalFilename();
        System.out.println("原始文件名称：" + originalFileName);

        //获取文件类型，以最后一个`.`为标识
        String type = originalFileName.substring(originalFileName.lastIndexOf(".") + 1);
        System.out.println("文件类型：" + type);
        //获取文件名称（不包含格式）
        String name = originalFileName.substring(0, originalFileName.lastIndexOf("."));

        //设置文件新名称: 当前时间+文件名称（不包含格式）
        Date d = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String date = sdf.format(d);
        String fileName = date + name + "." + type;
        System.out.println("新文件名称：" + fileName);
        /**
         * 从46行到60行的目的是获取一个唯一的文件名称；比如原来的文件是girl.jpg,经过46到60后
         * 文件名称变成了这样：20210919xxxx.jpg;
         *
         * 其实还可以使用一种更简单的方式：
         * String fileName=UUID.randomUUID().toString()+"."+StringUtils.substringAfterLast(ororiginalFileName, ".");
         * 比如文件名是gilr.jpg,经过StringUtils.substringAfterLast(ororiginalFileName, ".")后，就变成了girl;
         *
         */

        //在指定路径下创建一个文件
        File targetFile = new File(filePath, fileName);

        //将文件保存到服务器指定位置
        try {
            file.transferTo(targetFile);
            System.out.println("上传成功");
            //将文件在服务器的存储路径返回
            return  Result.success("/profile/" + fileName);
        } catch (IOException e) {
            System.out.println("上传失败");
            e.printStackTrace();
            return new Result("上传失败");
        }
    }
}

